package com.thermal.thermal_inspection.service;

import com.thermal.thermal_inspection.entity.Inspection;
import com.thermal.thermal_inspection.entity.InspectionData;
import com.thermal.thermal_inspection.vo.*;
import com.thermal.thermal_inspection.entity.InspectionData;
import com.thermal.thermal_inspection.entity.InspectionWork;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.sql.Timestamp;
import java.util.List;

public interface InspectionService {
    /**
     * 判断是否存在巡检任务名
     */
    boolean existInspectionName(String inspectionName);

    /**
     * 新增巡检任务
     */
    int addInspection(String inspectionName, int inspectionUserId, int inspectionClassId, int inspectionMapId);

    /**
     * 通过巡检任务名获得巡检任务
     */
    Inspection getInspectionByName(String inspectionName);

    /**
     * 新增巡检任务详情
     */
    int addInspectionData(int inspectionId, int inspectionGroupId, int mapDetailId, String inspectionDataDesc, String inspectionDataName);

    /**
     * 判断分配的巡检任务名是否存在
     */
    boolean existInspectionWorkName(String inspectionWorkName);

    /**
     * 查看分配的模板任务是否存在
     */
    boolean existInspection(int inspectionId);

    /**
     * 新增inspection_work表
     */
    int addInspectionWork(Timestamp inspectionStartTime, int inspectionLimitTime, String inspectionWorkName, int inspectionId, int inspectionWorkNumber, int inspectionWorkStatus);
    /**
     * 获取所有任务模版
     */
    List<Inspection> getAllInspectionTemplates();
    /**
     * 获取所有任务模版详情
     */
    List<InspectionDataVO> getAllInspectionDataVOs(int inspectionId,int inspectionMapId);

    /**
     * 通过name获取inspection_work
     */
    InspectionWork getInspectionWorkByName(String inspectionWorkName);

    /**
     * 插入inspection_detail表
     */
    int addInspectionDetail(int inspectionWorkId, int inspectionDataId, int inspectionDetailClass,
                            int inspectionDetailUser, int inspectionDetailStatus, String inspectionDetailNote);

    /**
     * 查看分配的巡检任务
     */
    List<InspectionVO> getInspection(int userId);

    /**
     * 查看分配的巡检任务详情
     */
    List<InspectionDetailVO> getInspectionDetail(int inspectionWorkId, int userId);

    /**
     * 修改巡检任务模板
     */
    Inspection changeInspection(int inspectionId, int inspectionMapId, String inspectionName, int inspectionUserId, int inspectionClassId);

    /**
     * 判断巡检任务详情是否存在
     */
    boolean existInspectionData(int inspectionDataId);

    /**
     * 修改任务详情
     */
    InspectionData changeInspectionData(int inspectionDataId, int inspectionId, int inspectionGroupId, int mapDetailId,
                                        String inspectionDataDesc, String inspectionDataName);

    /**
     * 删除巡检任务模板
     */
    int deleteInspection(int inspectionId);

    /**
     * 判断巡检任务详情是否存在
     */
    boolean existInspectionWork(int inspectionWorkId);

    /**
     * 删除分配巡检任务
     */
    int deleteInspectionWork(int inspectionWorkId);

    /**
     *通任务搜索
     */
    List<InspectionVO> searchInspection(int userId, Timestamp startTime, Timestamp endTime, int searchUserId, int mapId);

    /**
     * 查找用户巡查，异常，漏检，不合格数
     */
    StatusNumVO getStatusNumVO(int userId);

    /**
     * 定期更新用户巡查，异常，漏检，不合格数缓存
     */
    void updateCacheStatusNumVO();

    /**
     * 查找用户本周，本季，本月，本年未巡检数
     */
    NonInspectionVO getNonInspection(int userId);

    /**
     * 定期更新用户本周，本季，本月，本年未巡检数缓存
     */
    void updateCacheNonInspection();

    /**
     *根据创建者or模板名称or负责班组搜索模板
     */
    List<Inspection> searchInspectionTemplate(String inspectionName, Integer inspectionUserId, Integer inspectionClassId);

    /**
     * 定时更新分配的巡检任务状态
     */
    void updateCacheInspectionWorkStatus();

    /**
     * 获得处理中的任务
     */
    List<InspectionWork> getFinishingInspectionWork();

    /**
     * 获取未完成任务
     */
    List<InspectionWork> getStartInspectionWorkList();

    /**
     * 提交数据
     */
    int submitInspection(int inspectionDetailId, int inspectionGroupId, List<TextVO> textVOList, MultipartFile[] images, MultipartFile cheatMsg, boolean isAbnormal) throws IOException;

    /**
     * 取出保存图像（返回图片存在nginx里面的文件的http路径）
     */
    List<String> getPictures(int inspectionDetailId);

    /**
     * 定时删除分配巡检任务
     */
    void deleteInspectionOnTime();

    /**
     * 调用python模型，分析音频文件
     */
    String executePythonScript(String scriptPath, String audioFilePath, double minDb, double maxDb);

    /**
     * 获取点位数据
     */
    List<DataVO> getDetailData(int inspectionGroupId, int inspectionDetailId);

    /**
     * 判断某用户是否有分配巡检任务
     */
    boolean existInspectionDetailUser(int userId);

    /**
     * 判断用户是否为管理员
     */
    boolean isAdmin(int userId);

    /**
     * 查看所有用户本周，本季，本月，本年未巡检数之和
     */
    StatusNumVO getAllStatusNumVO();


}
